home *** CD-ROM | disk | FTP | other *** search
- /*
- * Dxf.h
- *
- * Structures de donnes de la norme DXF:
- *
- * Purpose:
- * --------
- * Ce fichier contient toutes les structures de donnes ncessaires
- *
la gestion de données par la norme Data eXchange Format.
- *
- * Notes:
- * ------
- * Norme DXF by Franois PLANQUE & Xavier CANY:
- *
- * FULC_DIFF
- * |
- * RECORD_DIFF
- * |
- * RECORD_NUMBER RECORD_FLAGS
- * \ /
- * HEAD_STRING FOOT_STRING
- * / \ /
- * COMPACT_HEADER {RECORD_FIELD}
- * |
- * COMPACT_RECORD COMPACT_FIELD
- * |
- * DATA_RECORDS
- */
-
- /*
- * Vrifie si les prsentes dfinitions ont dja t faites:
- */
- #ifndef _DXF_H_
- #define _DXF_H_
-
-
- #include <time.h>
-
- /*
- * FULC_DIFF: Division d'un numero de differenciation d'un Record DXF:
- *
- * Notes:
- * ------
- * Division en 3 variables selon Fulchrom. Peut varier d'une implémentation
- * à l'autre de la norme.
- */
- typedef
- struct
- {
- unsigned char magic; /* Choisissez votre numro */
- unsigned char repeat; /* Au cas ou vous envoyez */
- /* plusieurs messages
la */
- /* mme seconde */
- int random; /* Nombre alatoire */
- }
- FULC_DIFF;
-
-
- /*
- * RECORD_DIFF: Partie du numéro de différentiation d'un record DXF:
- */
- typedef
- union
- {
- unsigned long value; /* Nombre anonyme */
- FULC_DIFF fulc; /* Exemple de gestion de Fulchrom */
- }
- RECORD_DIFF;
-
-
- /*
- * RECORD_NUMBER: Numro de diffrentiation global d'un record DXF:
- *
- * Purpose:
- * --------
- * Sert
distinguer n'importe quel record de n'importe quel autre
- *
l'chelle mondiale.
- *
- * Notes:
- * ------
- * Type qui va etre inclus 2 fois a RECORD_HEAD
- */
- typedef
- struct
- {
- time_t date; /* Date format **IX */
- RECORD_DIFF diff; /* No de diffrenciation */
- }
- RECORD_NUMBER;
-
-
- /*
- * RECORD_FLAGS: Flags qualifiant l'enregistrement
- */
- typedef
- struct
- {
- BOOL b_Private : 1; /* Le message est priv (le dest est ds DSTA par exemple) */
- int n_Junk : 15; /* Mettre tout a
0 */
- }
- RECORD_FLAGS;
-
-
- /*
- * HEAD_STRING: HEADER d'un record DXF
- */
- typedef
- struct
- {
- unsigned long rec_length; /* Long totale record */
- /* (Utile lorsque l'on sauve ou qu'on charge sur disque) */
- /* Permet egalement de supprimer ou d'ajouter des infos */
- RECORD_NUMBER rec_idnb; /* Numro d'identification de l'enregistrement */
- RECORD_NUMBER ref_idnb; /* Numro d'identif de la rfrence */
- RECORD_FLAGS RecFlags; /* Flags qualifiant l'enregistrement */
- }
- HEAD_STRING;
-
-
- /*
- * FOOT_STRING: FOOTER d'un record DXF
- *
- * Suggest:
- * --------
- * Inclure un CRC16 ou CRC32 Check optionnel
- */
- typedef /* Chaine du FOOTER */
- struct
- {
- unsigned int checksum; /* Checksum */
- }
- FOOT_STRING;
-
-
- /*
- * RECORD_FIELD: Champ d'un record DXF NON COMPACTE
- * AVEC pointeur NEXT
- */
- typedef
- struct record_field
- {
- struct record_field * next; /* Pointeur sur le prochain champ */
- unsigned long field_id; /* Type de champ */
- size_t length; /* Longueur du champ */
- union /* Informations utiles */
- {
- HEAD_STRING * head; /* Info header */
- unsigned char * string; /* chaine pple du champ */
- FOOT_STRING * foot;
- } info;
- }
- RECORD_FIELD;
-
-
- /*
- * COMPACT_HEADER: HEADER de Record DXF sous forme compacte:
- *
- * Purpose:
- * --------
- * L'arrangement des donnes est ici telles qu'on les trouve
- * sur disque...
- * Permet de lire le dbut d'un record sur disque et de dterminer
- * la taille mmoire ncessaire pour le stocker sous forme de
- * COMPACT_RECORD
- */
- typedef
- struct
- {
- unsigned long head_id; /* Contient 'HEAD' */
- unsigned long head_length; /* Longueur du header */
- HEAD_STRING header; /* Header */
- }
- COMPACT_HEADER;
-
-
-
- /*
- * COMPACT_FIELD: Champ d'un record DXF COMPACTE
- * Suggest: remplacer tous les compact_headers par a!
- * UNKNOWN SIZE @ COMPILATION
- */
- typedef
- struct
- {
- ULONG UL_FieldId; /* Type de champ */
- size_t size_FieldLen; /* Longueur du champ */
- UBYTE bytes[]; /* Contenu du champ */
- }
- COMPACT_FIELD;
-
-
- /*
- * COMPACT_RECORD: Record DXF sous forme compacte:
- *
- * Purpose:
- * --------
- * L'arrangement des données est ici telles qu'on les trouve
- * sur disque... Chargement/sauvegarde rapides
- * Les FIELDS sont les uns à la suite des autres.
- * Pointeur vers l'avant et l'arriere pour recherche.
- *
- * History:
- * --------
- * 17.05.94: fplanque: ajout des ReadLocks
- * 18.11.94: dplac l'union data de taille VARIABLE
la fin... obligatoire a!
- */
- typedef
- struct compact_record
- {
- struct compact_record *prev; /* Record Prcdent */
- struct compact_record *next; /* Record Suivant */
- struct s_reclocks
- {
- int nb_ReadLocks : 15; /* Nbre de Locks partags sur cet enregistrement */
- int b_XLock : 1; /* !=0 s'il existe un XLock sur ce champ */
- } locks;
- union
- {
- COMPACT_HEADER header; /* Header compact (to be removed sooner or later) */
- COMPACT_FIELD CompactField; /* Champ compact */
- char compact_rec[]; /* Message compact UNKNOWN SIZE AT COMPILATION */
- } data;
- }
- COMPACT_RECORD;
-
-
- /*
- * DATA_RECORDS: Point d'entre d'une liste chainee de records DXF
- *
- * Purpose:
- * --------
- * Accs
une base de donnes en mmoire sous forme d'une liste
- * chane de COMPACT_RECORD
- */
- typedef
- struct
- {
- long nb_records; /* Nbre d'enregistrements */
- COMPACT_RECORD *first_record; /* 1er enregistrement */
- COMPACT_RECORD *last_record; /* dernier enregistrement */
- }
- DATA_RECORDS;
-
-
- /*
- * Fin du test anti redfinition:
- */
- #endif
-